/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP
// This file is generated from clusters-Attributes.h.zapt

#pragma once

#include <app/ConcreteAttributePath.h>
#include <app/data-model/DecodableList.h>
#include <app/data-model/List.h>
#include <app/data-model/Nullable.h>
#include <app/util/basic-types.h>
#include <lib/core/TLV.h>
#include <lib/support/BitMask.h>

#include <clusters/shared/Attributes.h>
#include <clusters/shared/Enums.h>
#include <clusters/shared/Structs.h>

#include <clusters/Thermostat/AttributeIds.h>
#include <clusters/Thermostat/ClusterId.h>
#include <clusters/Thermostat/Enums.h>
#include <clusters/Thermostat/Structs.h>

namespace chip
{
namespace app
{
	namespace Clusters
	{
		namespace Thermostat
		{
			namespace Attributes
			{

				namespace LocalTemperature
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<int16_t>;
						using DecodableType = chip::app::DataModel::Nullable<int16_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<int16_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::LocalTemperature::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace LocalTemperature
				namespace OutdoorTemperature
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<int16_t>;
						using DecodableType = chip::app::DataModel::Nullable<int16_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<int16_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::OutdoorTemperature::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace OutdoorTemperature
				namespace Occupancy
				{
					struct TypeInfo {
						using Type =
							chip::BitMask<chip::app::Clusters::Thermostat::OccupancyBitmap>;
						using DecodableType =
							chip::BitMask<chip::app::Clusters::Thermostat::OccupancyBitmap>;
						using DecodableArgType =
							chip::BitMask<chip::app::Clusters::Thermostat::OccupancyBitmap>;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Occupancy::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Occupancy
				namespace AbsMinHeatSetpointLimit
				{
					struct TypeInfo {
						using Type = int16_t;
						using DecodableType = int16_t;
						using DecodableArgType = int16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::AbsMinHeatSetpointLimit::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace AbsMinHeatSetpointLimit
				namespace AbsMaxHeatSetpointLimit
				{
					struct TypeInfo {
						using Type = int16_t;
						using DecodableType = int16_t;
						using DecodableArgType = int16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::AbsMaxHeatSetpointLimit::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace AbsMaxHeatSetpointLimit
				namespace AbsMinCoolSetpointLimit
				{
					struct TypeInfo {
						using Type = int16_t;
						using DecodableType = int16_t;
						using DecodableArgType = int16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::AbsMinCoolSetpointLimit::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace AbsMinCoolSetpointLimit
				namespace AbsMaxCoolSetpointLimit
				{
					struct TypeInfo {
						using Type = int16_t;
						using DecodableType = int16_t;
						using DecodableArgType = int16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::AbsMaxCoolSetpointLimit::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace AbsMaxCoolSetpointLimit
				namespace PICoolingDemand
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::PICoolingDemand::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace PICoolingDemand
				namespace PIHeatingDemand
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::PIHeatingDemand::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace PIHeatingDemand
				namespace HVACSystemTypeConfiguration
				{
					struct TypeInfo {
						using Type = chip::BitMask<
							chip::app::Clusters::Thermostat::HVACSystemTypeBitmap>;
						using DecodableType = chip::BitMask<
							chip::app::Clusters::Thermostat::HVACSystemTypeBitmap>;
						using DecodableArgType = chip::BitMask<
							chip::app::Clusters::Thermostat::HVACSystemTypeBitmap>;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::HVACSystemTypeConfiguration::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace HVACSystemTypeConfiguration
				namespace LocalTemperatureCalibration
				{
					struct TypeInfo {
						using Type = int8_t;
						using DecodableType = int8_t;
						using DecodableArgType = int8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::LocalTemperatureCalibration::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace LocalTemperatureCalibration
				namespace OccupiedCoolingSetpoint
				{
					struct TypeInfo {
						using Type = int16_t;
						using DecodableType = int16_t;
						using DecodableArgType = int16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::OccupiedCoolingSetpoint::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace OccupiedCoolingSetpoint
				namespace OccupiedHeatingSetpoint
				{
					struct TypeInfo {
						using Type = int16_t;
						using DecodableType = int16_t;
						using DecodableArgType = int16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::OccupiedHeatingSetpoint::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace OccupiedHeatingSetpoint
				namespace UnoccupiedCoolingSetpoint
				{
					struct TypeInfo {
						using Type = int16_t;
						using DecodableType = int16_t;
						using DecodableArgType = int16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::UnoccupiedCoolingSetpoint::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace UnoccupiedCoolingSetpoint
				namespace UnoccupiedHeatingSetpoint
				{
					struct TypeInfo {
						using Type = int16_t;
						using DecodableType = int16_t;
						using DecodableArgType = int16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::UnoccupiedHeatingSetpoint::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace UnoccupiedHeatingSetpoint
				namespace MinHeatSetpointLimit
				{
					struct TypeInfo {
						using Type = int16_t;
						using DecodableType = int16_t;
						using DecodableArgType = int16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MinHeatSetpointLimit::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MinHeatSetpointLimit
				namespace MaxHeatSetpointLimit
				{
					struct TypeInfo {
						using Type = int16_t;
						using DecodableType = int16_t;
						using DecodableArgType = int16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MaxHeatSetpointLimit::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MaxHeatSetpointLimit
				namespace MinCoolSetpointLimit
				{
					struct TypeInfo {
						using Type = int16_t;
						using DecodableType = int16_t;
						using DecodableArgType = int16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MinCoolSetpointLimit::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MinCoolSetpointLimit
				namespace MaxCoolSetpointLimit
				{
					struct TypeInfo {
						using Type = int16_t;
						using DecodableType = int16_t;
						using DecodableArgType = int16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MaxCoolSetpointLimit::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MaxCoolSetpointLimit
				namespace MinSetpointDeadBand
				{
					struct TypeInfo {
						using Type = int8_t;
						using DecodableType = int8_t;
						using DecodableArgType = int8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MinSetpointDeadBand::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MinSetpointDeadBand
				namespace RemoteSensing
				{
					struct TypeInfo {
						using Type = chip::BitMask<
							chip::app::Clusters::Thermostat::RemoteSensingBitmap>;
						using DecodableType = chip::BitMask<
							chip::app::Clusters::Thermostat::RemoteSensingBitmap>;
						using DecodableArgType = chip::BitMask<
							chip::app::Clusters::Thermostat::RemoteSensingBitmap>;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::RemoteSensing::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace RemoteSensing
				namespace ControlSequenceOfOperation
				{
					struct TypeInfo {
						using Type =
							chip::app::Clusters::Thermostat::ControlSequenceOfOperationEnum;
						using DecodableType =
							chip::app::Clusters::Thermostat::ControlSequenceOfOperationEnum;
						using DecodableArgType =
							chip::app::Clusters::Thermostat::ControlSequenceOfOperationEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ControlSequenceOfOperation::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ControlSequenceOfOperation
				namespace SystemMode
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::Thermostat::SystemModeEnum;
						using DecodableType = chip::app::Clusters::Thermostat::SystemModeEnum;
						using DecodableArgType =
							chip::app::Clusters::Thermostat::SystemModeEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SystemMode::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SystemMode
				namespace ThermostatRunningMode
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::Thermostat::ThermostatRunningModeEnum;
						using DecodableType =
							chip::app::Clusters::Thermostat::ThermostatRunningModeEnum;
						using DecodableArgType =
							chip::app::Clusters::Thermostat::ThermostatRunningModeEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ThermostatRunningMode::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ThermostatRunningMode
				namespace StartOfWeek
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::Thermostat::StartOfWeekEnum;
						using DecodableType = chip::app::Clusters::Thermostat::StartOfWeekEnum;
						using DecodableArgType =
							chip::app::Clusters::Thermostat::StartOfWeekEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::StartOfWeek::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace StartOfWeek
				namespace NumberOfWeeklyTransitions
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::NumberOfWeeklyTransitions::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace NumberOfWeeklyTransitions
				namespace NumberOfDailyTransitions
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::NumberOfDailyTransitions::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace NumberOfDailyTransitions
				namespace TemperatureSetpointHold
				{
					struct TypeInfo {
						using Type =
							chip::app::Clusters::Thermostat::TemperatureSetpointHoldEnum;
						using DecodableType =
							chip::app::Clusters::Thermostat::TemperatureSetpointHoldEnum;
						using DecodableArgType =
							chip::app::Clusters::Thermostat::TemperatureSetpointHoldEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::TemperatureSetpointHold::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace TemperatureSetpointHold
				namespace TemperatureSetpointHoldDuration
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint16_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint16_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint16_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::TemperatureSetpointHoldDuration::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace TemperatureSetpointHoldDuration
				namespace ThermostatProgrammingOperationMode
				{
					struct TypeInfo {
						using Type = chip::BitMask<
							chip::app::Clusters::Thermostat::ProgrammingOperationModeBitmap>;
						using DecodableType = chip::BitMask<
							chip::app::Clusters::Thermostat::ProgrammingOperationModeBitmap>;
						using DecodableArgType = chip::BitMask<
							chip::app::Clusters::Thermostat::ProgrammingOperationModeBitmap>;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ThermostatProgrammingOperationMode::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ThermostatProgrammingOperationMode
				namespace ThermostatRunningState
				{
					struct TypeInfo {
						using Type =
							chip::BitMask<chip::app::Clusters::Thermostat::RelayStateBitmap>;
						using DecodableType =
							chip::BitMask<chip::app::Clusters::Thermostat::RelayStateBitmap>;
						using DecodableArgType =
							chip::BitMask<chip::app::Clusters::Thermostat::RelayStateBitmap>;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ThermostatRunningState::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ThermostatRunningState
				namespace SetpointChangeSource
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::Thermostat::SetpointChangeSourceEnum;
						using DecodableType =
							chip::app::Clusters::Thermostat::SetpointChangeSourceEnum;
						using DecodableArgType =
							chip::app::Clusters::Thermostat::SetpointChangeSourceEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SetpointChangeSource::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SetpointChangeSource
				namespace SetpointChangeAmount
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<int16_t>;
						using DecodableType = chip::app::DataModel::Nullable<int16_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<int16_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SetpointChangeAmount::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SetpointChangeAmount
				namespace SetpointChangeSourceTimestamp
				{
					struct TypeInfo {
						using Type = uint32_t;
						using DecodableType = uint32_t;
						using DecodableArgType = uint32_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SetpointChangeSourceTimestamp::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SetpointChangeSourceTimestamp
				namespace OccupiedSetback
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::OccupiedSetback::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace OccupiedSetback
				namespace OccupiedSetbackMin
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::OccupiedSetbackMin::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace OccupiedSetbackMin
				namespace OccupiedSetbackMax
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::OccupiedSetbackMax::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace OccupiedSetbackMax
				namespace UnoccupiedSetback
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::UnoccupiedSetback::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace UnoccupiedSetback
				namespace UnoccupiedSetbackMin
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::UnoccupiedSetbackMin::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace UnoccupiedSetbackMin
				namespace UnoccupiedSetbackMax
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::UnoccupiedSetbackMax::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace UnoccupiedSetbackMax
				namespace EmergencyHeatDelta
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::EmergencyHeatDelta::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace EmergencyHeatDelta
				namespace ACType
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::Thermostat::ACTypeEnum;
						using DecodableType = chip::app::Clusters::Thermostat::ACTypeEnum;
						using DecodableArgType = chip::app::Clusters::Thermostat::ACTypeEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ACType::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ACType
				namespace ACCapacity
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ACCapacity::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ACCapacity
				namespace ACRefrigerantType
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::Thermostat::ACRefrigerantTypeEnum;
						using DecodableType =
							chip::app::Clusters::Thermostat::ACRefrigerantTypeEnum;
						using DecodableArgType =
							chip::app::Clusters::Thermostat::ACRefrigerantTypeEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ACRefrigerantType::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ACRefrigerantType
				namespace ACCompressorType
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::Thermostat::ACCompressorTypeEnum;
						using DecodableType =
							chip::app::Clusters::Thermostat::ACCompressorTypeEnum;
						using DecodableArgType =
							chip::app::Clusters::Thermostat::ACCompressorTypeEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ACCompressorType::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ACCompressorType
				namespace ACErrorCode
				{
					struct TypeInfo {
						using Type =
							chip::BitMask<chip::app::Clusters::Thermostat::ACErrorCodeBitmap>;
						using DecodableType =
							chip::BitMask<chip::app::Clusters::Thermostat::ACErrorCodeBitmap>;
						using DecodableArgType =
							chip::BitMask<chip::app::Clusters::Thermostat::ACErrorCodeBitmap>;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ACErrorCode::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ACErrorCode
				namespace ACLouverPosition
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::Thermostat::ACLouverPositionEnum;
						using DecodableType =
							chip::app::Clusters::Thermostat::ACLouverPositionEnum;
						using DecodableArgType =
							chip::app::Clusters::Thermostat::ACLouverPositionEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ACLouverPosition::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ACLouverPosition
				namespace ACCoilTemperature
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<int16_t>;
						using DecodableType = chip::app::DataModel::Nullable<int16_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<int16_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ACCoilTemperature::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ACCoilTemperature
				namespace ACCapacityformat
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::Thermostat::ACCapacityFormatEnum;
						using DecodableType =
							chip::app::Clusters::Thermostat::ACCapacityFormatEnum;
						using DecodableArgType =
							chip::app::Clusters::Thermostat::ACCapacityFormatEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ACCapacityformat::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ACCapacityformat
				namespace PresetTypes
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::List<
							const chip::app::Clusters::Thermostat::Structs::
								PresetTypeStruct::Type>;
						using DecodableType = chip::app::DataModel::DecodableList<
							chip::app::Clusters::Thermostat::Structs::PresetTypeStruct::
								DecodableType>;
						using DecodableArgType = const chip::app::DataModel::DecodableList<
							chip::app::Clusters::Thermostat::Structs::PresetTypeStruct::
								DecodableType> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::PresetTypes::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace PresetTypes
				namespace ScheduleTypes
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::List<
							const chip::app::Clusters::Thermostat::Structs::
								ScheduleTypeStruct::Type>;
						using DecodableType = chip::app::DataModel::DecodableList<
							chip::app::Clusters::Thermostat::Structs::ScheduleTypeStruct::
								DecodableType>;
						using DecodableArgType = const chip::app::DataModel::DecodableList<
							chip::app::Clusters::Thermostat::Structs::ScheduleTypeStruct::
								DecodableType> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ScheduleTypes::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ScheduleTypes
				namespace NumberOfPresets
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::NumberOfPresets::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace NumberOfPresets
				namespace NumberOfSchedules
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::NumberOfSchedules::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace NumberOfSchedules
				namespace NumberOfScheduleTransitions
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::NumberOfScheduleTransitions::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace NumberOfScheduleTransitions
				namespace NumberOfScheduleTransitionPerDay
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::NumberOfScheduleTransitionPerDay::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace NumberOfScheduleTransitionPerDay
				namespace ActivePresetHandle
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<chip::ByteSpan>;
						using DecodableType = chip::app::DataModel::Nullable<chip::ByteSpan>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<chip::ByteSpan> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ActivePresetHandle::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
						static constexpr size_t MaxLength() { return 16; }
					};
				} // namespace ActivePresetHandle
				namespace ActiveScheduleHandle
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<chip::ByteSpan>;
						using DecodableType = chip::app::DataModel::Nullable<chip::ByteSpan>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<chip::ByteSpan> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ActiveScheduleHandle::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
						static constexpr size_t MaxLength() { return 16; }
					};
				} // namespace ActiveScheduleHandle
				namespace Presets
				{
					struct TypeInfo {
						using Type =
							chip::app::DataModel::List<const chip::app::Clusters::Thermostat::
											   Structs::PresetStruct::Type>;
						using DecodableType = chip::app::DataModel::DecodableList<
							chip::app::Clusters::Thermostat::Structs::PresetStruct::
								DecodableType>;
						using DecodableArgType = const chip::app::DataModel::DecodableList<
							chip::app::Clusters::Thermostat::Structs::PresetStruct::
								DecodableType> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Presets::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Presets
				namespace Schedules
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::List<
							const chip::app::Clusters::Thermostat::Structs::ScheduleStruct::
								Type>;
						using DecodableType = chip::app::DataModel::DecodableList<
							chip::app::Clusters::Thermostat::Structs::ScheduleStruct::
								DecodableType>;
						using DecodableArgType = const chip::app::DataModel::DecodableList<
							chip::app::Clusters::Thermostat::Structs::ScheduleStruct::
								DecodableType> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Schedules::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Schedules
				namespace SetpointHoldExpiryTimestamp
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint32_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint32_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint32_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SetpointHoldExpiryTimestamp::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SetpointHoldExpiryTimestamp
				namespace MaxThermostatSuggestions
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MaxThermostatSuggestions::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MaxThermostatSuggestions
				namespace ThermostatSuggestions
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::List<
							const chip::app::Clusters::Thermostat::Structs::
								ThermostatSuggestionStruct::Type>;
						using DecodableType = chip::app::DataModel::DecodableList<
							chip::app::Clusters::Thermostat::Structs::
								ThermostatSuggestionStruct::DecodableType>;
						using DecodableArgType = const chip::app::DataModel::DecodableList<
							chip::app::Clusters::Thermostat::Structs::
								ThermostatSuggestionStruct::DecodableType> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ThermostatSuggestions::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ThermostatSuggestions
				namespace CurrentThermostatSuggestion
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<
							chip::app::Clusters::Thermostat::Structs::
								ThermostatSuggestionStruct::Type>;
						using DecodableType = chip::app::DataModel::Nullable<
							chip::app::Clusters::Thermostat::Structs::
								ThermostatSuggestionStruct::DecodableType>;
						using DecodableArgType = const chip::app::DataModel::Nullable<
							chip::app::Clusters::Thermostat::Structs::
								ThermostatSuggestionStruct::DecodableType> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::CurrentThermostatSuggestion::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace CurrentThermostatSuggestion
				namespace ThermostatSuggestionNotFollowingReason
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<chip::BitMask<
							chip::app::Clusters::Thermostat::
								ThermostatSuggestionNotFollowingReasonBitmap>>;
						using DecodableType = chip::app::DataModel::Nullable<chip::BitMask<
							chip::app::Clusters::Thermostat::
								ThermostatSuggestionNotFollowingReasonBitmap>>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<chip::BitMask<
								chip::app::Clusters::Thermostat::
									ThermostatSuggestionNotFollowingReasonBitmap>> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ThermostatSuggestionNotFollowingReason::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ThermostatSuggestionNotFollowingReason
				namespace GeneratedCommandList
				{
					struct TypeInfo
						: public Clusters::Globals::Attributes::GeneratedCommandList::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
					};
				} // namespace GeneratedCommandList
				namespace AcceptedCommandList
				{
					struct TypeInfo
						: public Clusters::Globals::Attributes::AcceptedCommandList::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
					};
				} // namespace AcceptedCommandList
				namespace AttributeList
				{
					struct TypeInfo
						: public Clusters::Globals::Attributes::AttributeList::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
					};
				} // namespace AttributeList
				namespace FeatureMap
				{
					struct TypeInfo : public Clusters::Globals::Attributes::FeatureMap::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
					};
				} // namespace FeatureMap
				namespace ClusterRevision
				{
					struct TypeInfo
						: public Clusters::Globals::Attributes::ClusterRevision::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}
					};
				} // namespace ClusterRevision

				struct TypeInfo {
					struct DecodableType {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::Thermostat::Id;
						}

						CHIP_ERROR Decode(TLV::TLVReader &reader,
								  const ConcreteAttributePath &path);

						Attributes::LocalTemperature::TypeInfo::DecodableType localTemperature;
						Attributes::OutdoorTemperature::TypeInfo::DecodableType
							outdoorTemperature;
						Attributes::Occupancy::TypeInfo::DecodableType occupancy = static_cast<
							chip::BitMask<chip::app::Clusters::Thermostat::OccupancyBitmap>>(
							0);
						Attributes::AbsMinHeatSetpointLimit::TypeInfo::DecodableType
							absMinHeatSetpointLimit = static_cast<int16_t>(0);
						Attributes::AbsMaxHeatSetpointLimit::TypeInfo::DecodableType
							absMaxHeatSetpointLimit = static_cast<int16_t>(0);
						Attributes::AbsMinCoolSetpointLimit::TypeInfo::DecodableType
							absMinCoolSetpointLimit = static_cast<int16_t>(0);
						Attributes::AbsMaxCoolSetpointLimit::TypeInfo::DecodableType
							absMaxCoolSetpointLimit = static_cast<int16_t>(0);
						Attributes::PICoolingDemand::TypeInfo::DecodableType PICoolingDemand =
							static_cast<uint8_t>(0);
						Attributes::PIHeatingDemand::TypeInfo::DecodableType PIHeatingDemand =
							static_cast<uint8_t>(0);
						Attributes::HVACSystemTypeConfiguration::TypeInfo::DecodableType
							HVACSystemTypeConfiguration = static_cast<chip::BitMask<
								chip::app::Clusters::Thermostat::HVACSystemTypeBitmap>>(
								0);
						Attributes::LocalTemperatureCalibration::TypeInfo::DecodableType
							localTemperatureCalibration = static_cast<int8_t>(0);
						Attributes::OccupiedCoolingSetpoint::TypeInfo::DecodableType
							occupiedCoolingSetpoint = static_cast<int16_t>(0);
						Attributes::OccupiedHeatingSetpoint::TypeInfo::DecodableType
							occupiedHeatingSetpoint = static_cast<int16_t>(0);
						Attributes::UnoccupiedCoolingSetpoint::TypeInfo::DecodableType
							unoccupiedCoolingSetpoint = static_cast<int16_t>(0);
						Attributes::UnoccupiedHeatingSetpoint::TypeInfo::DecodableType
							unoccupiedHeatingSetpoint = static_cast<int16_t>(0);
						Attributes::MinHeatSetpointLimit::TypeInfo::DecodableType
							minHeatSetpointLimit = static_cast<int16_t>(0);
						Attributes::MaxHeatSetpointLimit::TypeInfo::DecodableType
							maxHeatSetpointLimit = static_cast<int16_t>(0);
						Attributes::MinCoolSetpointLimit::TypeInfo::DecodableType
							minCoolSetpointLimit = static_cast<int16_t>(0);
						Attributes::MaxCoolSetpointLimit::TypeInfo::DecodableType
							maxCoolSetpointLimit = static_cast<int16_t>(0);
						Attributes::MinSetpointDeadBand::TypeInfo::DecodableType
							minSetpointDeadBand = static_cast<int8_t>(0);
						Attributes::RemoteSensing::TypeInfo::DecodableType remoteSensing =
							static_cast<chip::BitMask<
								chip::app::Clusters::Thermostat::RemoteSensingBitmap>>(
								0);
						Attributes::ControlSequenceOfOperation::TypeInfo::DecodableType
							controlSequenceOfOperation =
								static_cast<chip::app::Clusters::Thermostat::
										    ControlSequenceOfOperationEnum>(0);
						Attributes::SystemMode::TypeInfo::DecodableType systemMode =
							static_cast<chip::app::Clusters::Thermostat::SystemModeEnum>(0);
						Attributes::ThermostatRunningMode::TypeInfo::DecodableType
							thermostatRunningMode =
								static_cast<chip::app::Clusters::Thermostat::
										    ThermostatRunningModeEnum>(0);
						Attributes::StartOfWeek::TypeInfo::DecodableType startOfWeek =
							static_cast<chip::app::Clusters::Thermostat::StartOfWeekEnum>(
								0);
						Attributes::NumberOfWeeklyTransitions::TypeInfo::DecodableType
							numberOfWeeklyTransitions = static_cast<uint8_t>(0);
						Attributes::NumberOfDailyTransitions::TypeInfo::DecodableType
							numberOfDailyTransitions = static_cast<uint8_t>(0);
						Attributes::TemperatureSetpointHold::TypeInfo::DecodableType
							temperatureSetpointHold =
								static_cast<chip::app::Clusters::Thermostat::
										    TemperatureSetpointHoldEnum>(0);
						Attributes::TemperatureSetpointHoldDuration::TypeInfo::DecodableType
							temperatureSetpointHoldDuration;
						Attributes::ThermostatProgrammingOperationMode::TypeInfo::DecodableType
							thermostatProgrammingOperationMode = static_cast<
								chip::BitMask<chip::app::Clusters::Thermostat::
										      ProgrammingOperationModeBitmap>>(
								0);
						Attributes::ThermostatRunningState::TypeInfo::DecodableType
							thermostatRunningState = static_cast<chip::BitMask<
								chip::app::Clusters::Thermostat::RelayStateBitmap>>(0);
						Attributes::SetpointChangeSource::TypeInfo::DecodableType
							setpointChangeSource =
								static_cast<chip::app::Clusters::Thermostat::
										    SetpointChangeSourceEnum>(0);
						Attributes::SetpointChangeAmount::TypeInfo::DecodableType
							setpointChangeAmount;
						Attributes::SetpointChangeSourceTimestamp::TypeInfo::DecodableType
							setpointChangeSourceTimestamp = static_cast<uint32_t>(0);
						Attributes::OccupiedSetback::TypeInfo::DecodableType occupiedSetback;
						Attributes::OccupiedSetbackMin::TypeInfo::DecodableType
							occupiedSetbackMin;
						Attributes::OccupiedSetbackMax::TypeInfo::DecodableType
							occupiedSetbackMax;
						Attributes::UnoccupiedSetback::TypeInfo::DecodableType unoccupiedSetback;
						Attributes::UnoccupiedSetbackMin::TypeInfo::DecodableType
							unoccupiedSetbackMin;
						Attributes::UnoccupiedSetbackMax::TypeInfo::DecodableType
							unoccupiedSetbackMax;
						Attributes::EmergencyHeatDelta::TypeInfo::DecodableType
							emergencyHeatDelta = static_cast<uint8_t>(0);
						Attributes::ACType::TypeInfo::DecodableType ACType =
							static_cast<chip::app::Clusters::Thermostat::ACTypeEnum>(0);
						Attributes::ACCapacity::TypeInfo::DecodableType ACCapacity =
							static_cast<uint16_t>(0);
						Attributes::ACRefrigerantType::TypeInfo::DecodableType
							ACRefrigerantType = static_cast<
								chip::app::Clusters::Thermostat::ACRefrigerantTypeEnum>(
								0);
						Attributes::ACCompressorType::TypeInfo::DecodableType ACCompressorType =
							static_cast<
								chip::app::Clusters::Thermostat::ACCompressorTypeEnum>(
								0);
						Attributes::ACErrorCode::TypeInfo::DecodableType ACErrorCode =
							static_cast<chip::BitMask<
								chip::app::Clusters::Thermostat::ACErrorCodeBitmap>>(0);
						Attributes::ACLouverPosition::TypeInfo::DecodableType ACLouverPosition =
							static_cast<
								chip::app::Clusters::Thermostat::ACLouverPositionEnum>(
								0);
						Attributes::ACCoilTemperature::TypeInfo::DecodableType ACCoilTemperature;
						Attributes::ACCapacityformat::TypeInfo::DecodableType ACCapacityformat =
							static_cast<
								chip::app::Clusters::Thermostat::ACCapacityFormatEnum>(
								0);
						Attributes::PresetTypes::TypeInfo::DecodableType presetTypes;
						Attributes::ScheduleTypes::TypeInfo::DecodableType scheduleTypes;
						Attributes::NumberOfPresets::TypeInfo::DecodableType numberOfPresets =
							static_cast<uint8_t>(0);
						Attributes::NumberOfSchedules::TypeInfo::DecodableType
							numberOfSchedules = static_cast<uint8_t>(0);
						Attributes::NumberOfScheduleTransitions::TypeInfo::DecodableType
							numberOfScheduleTransitions = static_cast<uint8_t>(0);
						Attributes::NumberOfScheduleTransitionPerDay::TypeInfo::DecodableType
							numberOfScheduleTransitionPerDay;
						Attributes::ActivePresetHandle::TypeInfo::DecodableType
							activePresetHandle;
						Attributes::ActiveScheduleHandle::TypeInfo::DecodableType
							activeScheduleHandle;
						Attributes::Presets::TypeInfo::DecodableType presets;
						Attributes::Schedules::TypeInfo::DecodableType schedules;
						Attributes::SetpointHoldExpiryTimestamp::TypeInfo::DecodableType
							setpointHoldExpiryTimestamp;
						Attributes::MaxThermostatSuggestions::TypeInfo::DecodableType
							maxThermostatSuggestions = static_cast<uint8_t>(0);
						Attributes::ThermostatSuggestions::TypeInfo::DecodableType
							thermostatSuggestions;
						Attributes::CurrentThermostatSuggestion::TypeInfo::DecodableType
							currentThermostatSuggestion;
						Attributes::ThermostatSuggestionNotFollowingReason::TypeInfo::DecodableType
							thermostatSuggestionNotFollowingReason;
						Attributes::GeneratedCommandList::TypeInfo::DecodableType
							generatedCommandList;
						Attributes::AcceptedCommandList::TypeInfo::DecodableType
							acceptedCommandList;
						Attributes::AttributeList::TypeInfo::DecodableType attributeList;
						Attributes::FeatureMap::TypeInfo::DecodableType featureMap =
							static_cast<uint32_t>(0);
						Attributes::ClusterRevision::TypeInfo::DecodableType clusterRevision =
							static_cast<uint16_t>(0);
					};
				};
			} // namespace Attributes
		} // namespace Thermostat
	} // namespace Clusters
} // namespace app
} // namespace chip
